// 通过vue-router插件实现模板路由配置
import { createRouter, createWebHashHistory } from 'vue-router'
import { constantRoute } from './routes'
import {isHttp} from "@/utils/commons"

// 创建路由器
const router = createRouter({
  // 路由模式hash
  history: createWebHashHistory(),
  routes: constantRoute,
  // 滚动行为
  scrollBehavior() {
    return {
      left: 0,
      top: 0,
    }
  },
})

export default router

// 动态添加路由
export const addRoutes = (routes) => {
  if (!routes?.length) return

  // 清除已有的动态路由
  const removeRoutes = []

  // 处理后端返回的路由数据，转换为Vue Router可用的格式
  const asyncRoutes = formatRoutes(routes)

  // 动态添加路由
  asyncRoutes.forEach(route => {
    // path 以 http 开头就不加入
    if (isHttp(route.path)) return
    removeRoutes.push(router.addRoute(route))
  })

  // 更新用户仓库中的菜单路由
  // 注意：这里需要导入useUserStore，但为避免循环引用问题，
  // 我们在用户仓库中直接使用constantRoute和新添加的routes来构建菜单
  // 用户仓库会在调用此方法后自动更新menuRoutes

  //console.log('动态路由添加成功', asyncRoutes)
}

// 格式化路由数据
const formatRoutes = (routes) => {
  return routes.map((route) => ({
    path: route.path,
    name: route.name,
    component: loadComponent(route),
    redirect: route.redirect,
    meta: {
      title: route.meta?.title || route.name,
      icon: route.meta?.icon || '',
      hidden: route.meta?.hidden || false,
      component: route?.component
    },
    ...(route.children?.length ? { children: formatRoutes(route.children) } : {})
  }))
}

// 匹配views里面所有的.vue文件
const modules = import.meta.glob('@/views/**/*.vue')

// 动态加载组件
const loadComponent = (router) => {
  const isFrame = router.meta.frame
  const component = router.component
  if(isFrame === 2){
    return () => import("@/layout/InnerLink/index.vue")
  }

  // 处理布局组件
  if (component === 'layout/index' || component === 'Layout') {
    return () => import('@/layout/index.vue')
  }

  if (component === 'ParentView') {
    return () => import('@/components/ParentView/index.vue')
  }

  // 如果组件路径为空，返回404页面
  if (!component) {
    return () => import('@/views/error/404.vue')
  }

  // 遍历匹配组件
  for (const path in modules) {
    const dir = path.split('views/')[1]?.split('.vue')[0]
    if (dir === component) {
      return modules[path]
    }
  }

  // 未找到组件时返回404页面
  console.warn(`组件 ${component} 未找到，将显示404页面`)
  return () => import('@/views/error/404.vue')
}

